package org.dfg.corejava.jdk8.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.dfg.corejava.jdk8.User;
import org.dfg.corejava.jdk8.Vip;

/**
 * 中间方法:返回Stream<br/>
 * 终端方法:收集流返回的最终结果
 */
public class StreamTest {
	public static void main(String[] args) {
		t4();
	}

	/**
	 * filter 过滤
	 */
	public static void t1() {
		List<User> list = getList();
		Stream<User> s = list.stream().filter(p -> p.id > 1);

		Iterator<User> i = s.iterator();
		while (i.hasNext()) {
			User u = i.next();
			System.out.println(u);
		}
	}

	/**
	 * map 允许执行一个function，接受入参并返回另一种类型的参数
	 */
	public static void t2() {
		List<User> list = getList();
		Stream<User> s = list.stream().filter(p -> p.age > 18);
		// 匿名内部类写法
		/*
		 * s.map(new Function<User, Vip>() {
		 * @Override public Vip apply(User u) { return new Vip(u); } });
		 */
		// lambda写法
		Stream<Vip> sv = s.map(u -> new Vip(u));// 18岁以上的是VIp

	}

	/**
	 * count方法，一个流的终点方法
	 */
	public static void t3() {
		List<User> list = getList();
		Stream<User> s = list.stream().filter(p -> p.age > 18);
		long count = s.count();

	}

	/**
	 * count方法，一个流的终点方法
	 */
	public static void t4() {
		List<User> list = getList();
		Stream<User> s = list.stream().filter(p -> p.age > 18);
		Stream<Vip> sv = s.map(u -> new Vip(u));

		// 1
		List<Vip> v = sv.collect(Collectors.toList());
		for (Vip e : v) {
			System.out.println(e.u);
		}
		// 2
		sv.collect(Collectors.toCollection(ArrayList::new));
	}

	public static List<User> getList() {
		return Arrays.asList(new User(1, "qq", 18), new User(2, "ww", 19));
	}

	public static void show(Iterator<User> i) {
		while (i.hasNext()) {
			User u = i.next();
			System.out.println(u);
		}
	}
}
